#include <iostream>
#include <stdio.h>
using namespace std;
#define MAXSIZE 100
typedef struct
{
    int *base;
    int *top;
    int length;
}SqStack;

int InitStact(SqStack &S)
{
    S.base=new int[MAXSIZE];
    S.top=S.base;
    S.length=MAXSIZE;
    return 1;
}

int Push(SqStack &S,int e)
{
  if(S.top-S.base==S.length) return 0;
  *S.top=e;
  S.top++;
  return 1;
}

int Pop(SqStack &S)
{
    if(S.top-S.base==0) return 0;
    S.top--;
    return *S.top;
}

int Top(SqStack S)
{
    if(S.top==S.base) return 0;
    return *(--S.top);
}

int Empty(SqStack S)
{
    if(S.top-S.base==0) return 1;
    else return 0;
}

int main()
{
    SqStack S;
    InitStact(S);
    int n,a[MAXSIZE],max[MAXSIZE],pos[MAXSIZE],i,j;
    scanf("%d",&n);
    for(i=0;i<n;++i)
        scanf("%d",&a[i]);
    max[n]=a[n-1];
    for(i=n-1;i>=0;--i)
    {
        if(max[1+i]>a[i])
        {
          max[i]=max[i+1];
          pos[i]=pos[i+1];
        }
        else
        {
            max[i]=a[i];
            pos[i]=i;
        }
    }
    for(j=0,i=0;i<n;++i)
    {
         if((Empty(S)||Top(S)<max[j])&&j<n)
            for(int k=pos[j];j<=k;++j)
            {
                Push(S,a[j]);
            }
           printf("%d ",Pop(S));
    }
    return 0;
}
